interface IStatisticsExtra {
  [key: string]: any;
}

interface IStatisticsEvent<T extends IStatisticsExtra> {
  id?: string;
  extra?: T;
}

class StatisticsEvent<T> implements IStatisticsEvent<T> {
  id?: string;
  extra?: T;
  constructor({ extra }: IStatisticsEvent<T>) {
    this.extra = extra;
  }
}


// 设备蓝牙连接事件 上报数据结构
interface IBleDeviceConnectExtra extends IStatisticsExtra {
  product_key: string; // 连接的产品pk
  connect_success: boolean; // 连接结果
  connect_result: string; // 连接结果的json string
}

// 设备蓝牙连接事件
class BleDeviceConnectEvent extends StatisticsEvent<IBleDeviceConnectExtra> {
  id = 'ble_device_connect';
}

// 设备蓝牙控制 上报数据结构
interface IBleDeviceControlExtra extends IStatisticsExtra {
  product_key: string; // 控制的产品pk
  send_cmd_success: boolean; // 控制结果
  send_cmd_result: string; // 控制结果的json string
}

// 设备蓝牙控制事件
class BleDeviceControlEvent extends StatisticsEvent<IBleDeviceControlExtra> {
  id = 'ble_device_control';
}


// 设备配网 上报数据结构
interface IDeviceConfigNetWorkExtra extends IStatisticsExtra {
  product_key: string; // 配网的产品pk
  network_type: string; // 配网使用的方式，使用产品配置的networkConfigType字段约定的值
  config_success: boolean; // 配网结果
  config_result: string; // 配网结果的json string
  time_diff: number; // 配网耗时
}

// 设备蓝牙控制事件
class DeviceConfigNetWorkEvent extends StatisticsEvent<IDeviceConfigNetWorkExtra> {
  id = 'device_config_network';
}



export {
  IStatisticsExtra,
  IStatisticsEvent,
  BleDeviceConnectEvent,
  BleDeviceControlEvent,
  DeviceConfigNetWorkEvent
}
